# _*_ coding:utf-8 _*_
"""
description:生成log
"""

import os, logbook
from functools import wraps

from logbook import Logger, TimedRotatingFileHandler
from logbook.more import ColorizedStderrHandler
from config.GlobalParameter import LOG_DIR

if not os.path.exists(LOG_DIR): os.makedirs(LOG_DIR)


# 设置日志格式
def log_type(record, handler):
    log = "[{date}] [{level}] [{filename}] [{func_name}] [{lineno}] {msg}".format(
        date=record.time,  # 日志时间
        level=record.level_name,  # 日志等级
        filename=os.path.split(record.filename)[-1],  # 文件名
        func_name=record.func_name,  # 函数名
        lineno=record.lineno,  # 行号
        msg=record.message  # 日志内容
    )
    return log


logbook.set_datetime_format("local")
# 日志打印到屏幕
log_std = ColorizedStderrHandler(bubble=True)
# 生成日志格式
log_std.formatter = log_type

# 日志打印到文件
log_file = TimedRotatingFileHandler(os.path.join(LOG_DIR, '%s.log' % 'App UI'), date_format='%Y-%m-%d %H', bubble=True,
                                    encoding='utf-8')
# 日志生成格式
log_file.formatter = log_type

# 脚本日志
LOG = Logger()

# 生效配置
LOG.handlers = []
LOG.handlers.append(log_file)
LOG.handlers.append(log_std)


def logger(param):
    """ function from logger meta """

    def wrap(function):
        """ logger wrapper """

        @wraps(function)
        def _wrap(*args, **kwargs):  # *args非关键字参数，输出元组，**kwargs关键字双号参数，输出字典
            """ wrap tool """
            LOG.info("当前模块 ：{}".format(param))
            LOG.info("每条测试用例数据： {}".format(str(args)))
            # LOG.info("全部kwargs参数信息 ： {}".format(str(kwargs)))
            return function(*args, **kwargs)

        return _wrap

    return wrap
